/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package hps.model;

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Composite;
import java.awt.Graphics;
import java.io.Serializable;

/**
 *
 * @author $Author: NIKE3500 $
 * @version $Revision: 81 $
 * @date $Date: 2013-01-14 12:55:54 +0000 (Mon, 14 Jan 2013) $
 */
public class FloorField implements IDrawable, Serializable
{

    private byte[][] field;
    private AlphaComposite drawAlpha;

    public FloorField(int xdim, int ydim)
    {
        field = new byte[xdim][ydim];
        drawAlpha = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f);
    }

    /**
     * liefert eine Kopie des internen Bytefeldes zurueck
     *
     * @return
     */
    public byte[][] getField()
    {
        return field.clone();
    }

    /**
     * setzt das uebergebene Bytefeld als neues internes feld
     *
     * @param newField
     */
    public void setField(byte[][] newField)
    {
        field = newField.clone();
    }

    @Override
    public FloorField clone()
    {
        FloorField rtrn = new FloorField(field.length, field[0].length);
        rtrn.field = this.field.clone();
        return rtrn;
    }

    @Override
    /**
     * Zeichnet die quadrate mit den entsprechenden Werten im field; kleinster
     * Wert->rot; höchster Wert -> grün
     *
     */
    public void draw(Graphics g, Point roomPosition, int singleFieldSize)
    {
        Composite comp = ((java.awt.Graphics2D) g).getComposite();
        ((java.awt.Graphics2D) g).setComposite(drawAlpha);
        for (int i = 0; i < field.length; i++)
        {
            for (int j = 0; j < field[0].length; j++)
            {
                /*
                 * uebertraegt die Werte in field in einen 0-510 Wertebereich
                 * damit die RGB-Werte leichter errechenbar werden
                 */
                int color = field[i][j] + 128;

                /*
                 //fuer den roten Wertebereich aendert sich nur der Gruenanteil
                 if(color<255){
                 g.setColor(new Color(255,color,0));
                 }
                 //fuer den gruenen Wertebereich aendert sich nur der Rotanteil
                 else{
                 g.setColor(new Color(510-color,255,0));
                 }
                 /*
                 * malt das Rechteck in entsprechender Stelle mit jeweiliger 
                 * Farbe auf die Graphik; +1/-2 damit die Linien nicht uebermalt 
                 * werden
                 *
                 */

                g.setColor(new Color(255 - color, color, 0));
                g.fillRect(roomPosition.getX() + i * singleFieldSize + 1, roomPosition.getY() + j * singleFieldSize + 1,
                        singleFieldSize - 1, singleFieldSize - 1);
            }
        }
        ((java.awt.Graphics2D) g).setComposite(comp);
    }
}
